perm filename DPYIII.FAI[SYS,BGB] blob
sn#001399 filedate 1970-11-12 generic text, type T, neo UTF8
00100 TITLE DISPLY -- DISPLAY PRIMITIVES
00200
00300 OPDEF DPYPOS [XWD 702100,0]
00400 OPDEF DPYSIZ [XWD 702140,0]
00500 OPDEF DPYCLR [XWD 701000,0]
00600 OPDEF UPG [XWD 703000,0]
00700 OPDEF GETLIN [TTYUUO 6,]
00800
00900
01000 EXTERNAL USERERR
01100 A←1
01200 B←2
01300 C←3
01400
01500 SP←16
01600 P←17
01700
01800 INTERNAL DPYSET,AIVECT,AVECT,APT,RIVECT,RVECT,RPT
01900 INTERNAL APOINT,RPOINT,AVECW,AIVECW,RVECW,RIVECW,APOINW,GVECW
02000 INTERNAL LOCATE,DJUMP,DJSR,FIXUP,DPYOUT,HYDPOG,DPYCLR,DPYBIG,DPYBRT,DPYRESET,DPYPARS
02100 INTERNAL CLRBFR,GVECT,DTYO,DPYSST
02200
02300 RV←←6
02400 AV←←106
02500 VIS←←0
02600 EP←←20
02700 INV←←40
02800 SVS←100
02900 SV←2
03000 DEFINE COMPAT(N)<
03100 POP P,RETURN
03200 JSP COMP-N>
03300
03400 POP P,5
03500 POP P,4
03600 POP P,3
03700 POP P,2
03800 POP P,1
03900 COMP: JRST @0
04000
00100 ;SAIL DECLARATIONS
00200 ;EXTERNAL PROCEDURE GVECT(INTEGER X,Y,OP,SIZE,BRT);
00300 ;EXTERNAL PROCEDURE AIVECT(INTEGER X,Y)
00400 ;EXTERNAL PROCEDURE AVECT(INTEGER X,Y)
00500 ;EXTERNAL PROCEDURE APT(INTEGER X,Y)
00600 ;EXTERNAL PROCEDURE RIVECT(INTEGER X,Y)
00700 ;EXTERNAL PROCEDURE RVECT(INTEGER X,Y)
00800 ;EXTERNAL PROCEDURE RPT(INTEGER X,Y)
00900
01000 GVECT: COMPAT(5)
01100 DPB C+1,[POINT 3,C,27]
01200 DPB C+2,[POINT 3,C,24]
01300 JRST LVC
01400
01500 AIVECT: MOVEI C,INV+AV
01600 JRST LV
01700 AVECT: MOVEI C,VIS+AV
01800 JRST LV
01900 APOINT:
02000 APT: MOVEI C,EP+AV
02100 LV: COMPAT(2)
02150 SKIPGE IGNORE↔JRST @RETURN
02200 LVC: DPB A,[POINT 11,C,10]
02300 DPB B,[POINT 11,C,21]
02400 LV2: AOS A,DPYPTR
02500 MOVEM C,(A)
02600 LV3: HRLI A,<(<POINT 7,0,35>)>
02700 MOVEM A,DPYPTR
02800 HRRZI A,(A)
02900 CAML A,BUFEND
02950 SETOM IGNORE
02975 SKIPA
03000 JRST[ PUSH P,[0]
03100 PUSH P,[0]
03200 PUSH SP,[=19]
03300 PUSH SP,[POINT 7,[ASCIZ /DPY BUFFER OVERFLOW/]]
03400 PUSHJ P,USERERR
03500 SOS DPYPTR
03600 JRST .+1]
03700 JRST @RETURN
03800
03900 RIVECT: MOVEI C,INV+RV
04000 JRST RVG
04100 RVECT: MOVEI C,VIS+RV
04200 JRST RVG
04300 RPOINT:
04400 RPT: MOVEI C,EP+RV
04500 RVG: COMPAT(2)
04600 SKIPE RELFLG#
04700 JRST LVC
04800 CAML A,[-SVS]
04900 CAIL A,SVS
05000 JRST LVC
05100 CAML B,[-SVS]
05200 CAIL B,SVS
05300 JRST LVC
05400 ANDCMI C,RV ;CAN CONSTRUCT SHORT VECTOR
05500 DPB A,[POINT 7,C,22]
05600 DPB B,[POINT 7,C,29]
05700 LSH C,20
05800 ORI C,SV+INV ;MAKE 2ND VECTORE INVISIBLE - ZERO LENGTH
05900 MOVE A,@DPYPTR
06000 TLZ A,777774
06100 CAIE A,(C) ;WAS LAST DPY OUTPUT A SHORT VECTOR WORD WITH 2ND VECTOR ZERO?
06200 JRST LV2 ;NO
06300 LSH C,-24 ;YES, PUT IT THERE
06400 DPB C,[POINT 16,@DPYPTR,31]
06500 HRRZ A,DPYPTR
06600 JRST @RETURN
06700
06800 INTERNAL NORELOPT,RELOPT
06900 NORELOPT:SETOM RELFLG
07000 POPJ P,
07100
07200 RELOPT: SETZM RELFLG
07300 POPJ P,
00100
00200 GVECW: COMPAT(5)
00300 DPB C+1,[POINT 3,C,27]
00400 DPB C+2,[POINT 3,C,24]
00500 JRST LVCW
00600
00700 AIVECW: MOVEI C,INV+AV
00800 JRST LVW
00900 AVECW: MOVEI C,VIS+AV
01000 JRST LVW
01100 APOINW: MOVEI C,EP+AV
01200 LVW: COMPAT(2)
01300 LVCW: DPB A,[POINT 11,C,10]
01400 DPB B,[POINT 11,C,21]
01500 MOVE A,C
01600 JRST @RETURN
01700
01800 RIVECW: MOVEI C,INV+RV
01900 JRST LVW
02000 RVECW: MOVEI C,VIS+RV
02100 JRST LVW
02200 RPOINW: MOVEI C,EP+RV
02300 JRST LVW
00100
00200 ;SAIL DECLARATIONS
00300 ;EXTERNAL INTEGER PROCEDURE LOCATE
00400 ;EXTERNAL PROCEDURE DTYO(INTEGER CHAR)
00500 ;EXTERNAL PROCEDURE DPYSST(STRING S);
00600 ;EXTERNAL PROCEDURE DJUMP(INTEGER ADR)
00700 ;EXTERNAL PROCEDURE DJSR(INTEGER ADR)
00800 ;EXTERNAL PRODECURE FIXUP(INTEGER ADR,VAL)
00900
01000 LOCATE: HRRZ A,DPYPTR
01100 POPJ P,
01200
01300 DTYO: COMPAT(1)
01400 IDPB A,DPYPTR
01500 HRRZ A,DPYPTR
01600 CAML A,BUFEND
01700 SETOM IGNORE
01800 JRST @RETURN
01900
02000 DPYSST: POP SP,1
02100 POP SP,2
02150 SKIPGE IGNORE↔POPJ P,
02200 HRRZS 2 ;LENGTH
02300 JUMPLE 2,SSRET
02400 ILDB 3,1
02500 IDPB 3,DPYPTR
02600 SOJG 2,.-2
02700 SSRET: HRRZ 1,DPYPTR
02800 CAML 1,BUFEND
02900 SETOM IGNORE
03000 POPJ P,
03100
03200 DJUMP: MOVEI C,1B31
03300 JRST DJ2
03400
03500 DJSR: MOVEI C,24
03600 DJ2: COMPAT(1)
03700 MOVSS A
03800 ADD C,A
03900 JRST LV2
04000
04100 FIXUP: COMPAT(2)
04200 HRLM B,(A)
04300 JRST @RETURN
00100
00200 ;SAIL DECLARATIONS
00300 ;EXTERNAL PROCEDURE DPYOUT(INTEGER PIECE_OF_GLASS)
00400 ;EXTERNAL PROCEDURE DPYCLR;
00500 ;EXTERNAL PROCEDURE DPYBIG(INTEGER SIZE);
00600 ;EXTERNAL PROCEDURE DPYTST;
00700 ;EXTERNAL PROCEDURE HYDPOG(INTEGER PIECE_OF_GLASS)
00800 ;EXTERNAL PROCEDURE CLRBFR;
00900 ;EXTERNAL PROCEDURE DPYSET(INTEGER ARRAY BUF);
01000
01100
01200 ; DPYTST TESTS TTY TO SEE IF IT IS A DPY -- SETS DPYFLG=0 IF A DPY,=-1 IF NOT
01300 INTERNAL DPYTST
01400 DPYTST: JRST .+3
01500 GETLIN 1
01600 SKIPGE 1
01700 SETZM DPYFLG ;WE ARE ON A DPY
01800 POPJ P,
01900
02000 DPYBIG: COMPAT(1)
02100 MOVEI 3,INV+RV ;ZERO LENGTH RELATIVE-INVISIBLE VECTOR
02200 DPB 1,[POINT 3,3,27]
02300 JRST LV2
02400
02500 DPYBRT: COMPAT(1)
02600 MOVEI 3,INV+RV
02700 DPB 1,[POINT 3,3,24]
02800 JRST LV2
02900
03000 DPYCLR: SKIPL DPYFLG#
03100 DPYCLR
03200 MOVSI 777774
03300 MOVEM POGWD
03400 SETZM BUFHD
03500 POPJ P,
03600
03700 DPYOUT: PUSHJ P,DPYPARS
03800 HRRZ B,DPYPTR
03900 SUB B,BUFHD
04000 ADDI B,1
04100 MOVEM B,BUFHD+1
04200 SH2: COMPAT(1)
04300 DPB A,[POINT 4,SH1,12]
04400 OR A,DPYFLG
04500 SKIPL A
04600 SH1: UPG BUFHD
04700 FALSE: MOVEI A,0
04800 JRST @RETURN
04900
05000 CLRBFR: COMPAT(0)
05100 JRST CLR2
05200
05300 DPYSET: PUSHJ P,DPYTST
05400 COMPAT(1)
05500 ADDI 1,2
05600 MOVEM 1,BUFHD
05700 HRRZ 2,-3(1) ;SIZE
05800 ADDI 2,-3(1)
05850 SUBI 2,1
05875 SETZM IGNORE
05900 MOVEM 2,BUFEND
06000
06100 CLR2: MOVE A,BUFHD
06200 MOVEI B,1
06300 MOVEM B,1(A)
06400 MOVEI B,2(A)
06500 HRLI B,1(A)
06600 BLT B,@BUFEND ;SET DPY BUFFER TO NULL CHARACTER WORDS
06700 JRST LV3
06800
06900
07000 HYDPOG: SETZM BUFHD+1
07100 JRST SH2
07200
07300 DPYPARS: SKIPN 1,BUFHD
07400 POPJ P,
07500 MOVE 2,DPYPTR
07600 MOVEM 2,-2(1)
07700 MOVEI 2,2(2)
07800 SUB 2,1
07900 MOVEM 2,-1(1)
08000 POPJ P,
08100
08200 DPYRESET: COMPAT(1)
08300 ADDI 1,2
08400 MOVEM 1,BUFHD
08500 HRRZ 2,-3(1)
08600 ADDI 2,-3(1)
08700 MOVEM 2,BUFEND
08800 HRRZ 1,-2(1)
08900 JRST CLR2+1
09000
09100 INTERNAL DPYTYP,TYPLOC
09200 DPYTYP: PUSHJ P,DPYTST
09300 COMPAT(3)
09400 SKIPGE DPYFLG
09500 JRST @RETURN
09600 DPYPOS(1) ;POSITION
09700 DPB 2,[POINT 9,3,26]
09800 DPYSIZ (3)
09900 JRST @RETURN
10000
10100 TYPLOC: PUSHJ P,DPYTST
10200 COMPAT(2)
10300 SKIPGE DPYFLG
10400 JRST @RETURN
10500 DPYPOS (1)
10600 SUB 1,2
10700 IDIVI 1,=23
10800 CAIG 1,2
10900 MOVEI 1,3
11000 DPYSIZ 1000-2(1)
11100 JRST @RETURN
00100 ;SAIL DECLARATIONS
00200 ;EXTERNAL PROCEDURE PGSEL(INTEGER POG)
00300 ;EXTERNAL PROCEDURE UPGMVM(INTEGER VAL;REFERENCE INTEGER ADR);
00400 ;EXTERNAL INTEGER PROCEDURE UPGMVE(REFERENCE INTEGER ADR);
00500
00600 INTERNAL PGSEL,UPGMVM,UPGMVE,GETPOG,RELPOG
00700 PGSEL: COMPAT(1)
00800 JUMPL 1,@RETURN
00900 SKIPL DPYFLG
01000 PGSEL 1
01100 JRST @RETURN
01200
01300 UPGMVM: COMPAT(2)
01400 SKIPL DPYFLG
01500 UPGMVM 1,(2)
01600 JRST @RETURN
01700
01800 UPGMVE: COMPAT(1)
01900 SKIPL DPYFLG
02000 UPGMVE 1,(1)
02100 JRST @RETURN
02200
02300 POGWD: XWD 777774,0
02400
02500 GETPOG: MOVE POGWD
02600 JFFO .+2
02700 MOVNI 1,1
02800 ROT (1)
02900 TLZ 400000
03000 MOVN 2,1
03100 ROT(2)
03200 MOVEM POGWD
03300 POPJ P,
03400
03500 RELPOG: MOVE 1,-1(P)
03600 MOVE POGWD
03700 ROT (1)
03800 TLO 400000
03900 MOVN 2,1
04000 ROT(2)
04100 MOVEM POGWD
04200 JRST HYDPOG
04250 IGNORE: 0
04300
04400 RETURN: 0
04450
04500
04600 INTERNAL DPYPTR;
04700 DPYPTR: 0
04800 BUFEND: 0
04900 BUFHD: 0
05000 0
05100
05200 END